
var store_departamento;
var store_editor;

Ext.onReady(function()
{
    store_departamento = new X.store.Json({
        fields : [
            'codigoDepartamento',
            'nombreDepartamento'
        ]
    });

    store_editor = new X.store.Json({
        url    : '/solicitudcc/ajax-filtro',
        fields : [
            'codigoMovimiento',
            'numeroComprobante',
            'razonSocial',
            'fechaMovimiento',
            'cantidad',
            'concepto',
            'monto',
            'observaciones'
        ]
    });

    store_editor.addListener('load', function(store, records, options){
        try{
            var sum = 0;
            for (var i=0; i< records.length; i++){
                sum += parseInt( records[i].get('monto') );
            }
            Ext.getCmp('monto').setValue(sum);
        }
        catch(e){
            X.msg.FailureJs(e.message);
        }
    });

    var grid = new X.grid.GridEditor({

        id        : 'editor',
        height    : 200,
        width     : 950,
        store     : store_editor,
        useTbar   : false,

        columns:[
            new X.column.Number({header: 'Comprobante',   dataIndex: 'numeroComprobante', width: 100}),
            new X.column.Text  ({header: 'Proveedor',     dataIndex: 'razonSocial',       width: 200}),
            new X.column.Date  ({header: 'Fecha',         dataIndex: 'fechaMovimiento',   width: 85}),
            new X.column.Number({header: 'Cantidad',      dataIndex: 'cantidad',          width: 57}),
            new X.column.Text  ({header: 'Concepto',      dataIndex: 'concepto',          width: 250}),
            new X.column.Money ({header: 'Monto',         dataIndex: 'monto',             width: 90}),
            new X.column.Text  ({header: 'Observaciones', dataIndex: 'observaciones',     width: 140})
        ],

        listeners:{
            // deshabilitar el edit
            beforeedit:function(e){
                e.cancel = true;
            }
        }
    });

    var form = new X.form.FormPanel({

        title            : 'Crear Solicitud de Reembolso de Caja Chica',
        submitButtonText : 'Crear',
        returnButtonText : 'Cancelar',
        submitUrl        : '/solicitudcc/ajax-crear',
        returnUrl        : '/solicitudcc/listar',
        width            : 1020,
        height           : 520,
        labelWidth       : 90,
        layout           : 'absolute',

        items:[
            new Ext.form.FieldSet({title:'Solicitud', x: 10, y: 5, width: 370, items:
            [
                new X.field.Hidden({                           id:'editorRows'               }),
                new X.field.Date  ({fieldLabel:'Fecha',        id:'fechaSolicitud', width:230, value: new Date()}),
                new X.field.Number({fieldLabel:'Monto Total',  id:'monto',          width:230, readOnly: true, vtype: 'total'}),
                new X.field.Text  ({fieldLabel:'Cheque Orden', id:'chequeOrden',    width:230})
            ]}),
            new Ext.form.FieldSet({title:'Detalles', x: 10, y: 120, width: 370, items:
            [
                new X.field.Text({fieldLabel:'Concepto',      id:'concepto',      width:230, allowBlank: true}),
                new X.field.Text({fieldLabel:'Observaciones', id:'observaciones', width:230, allowBlank: true})
            ]}),
            new Ext.form.FieldSet({title:'Búsqueda de Egresos de Caja Chica', x: 410, y: 5, width: 380, height: 202, layout:'absolute', items:
            [
                {layout:'form', x: 10, y: 25, items:[
                    new X.field.Date ({fieldLabel:'Fecha Inicial', id:'filtroInicial', width:230, allowBlank: true, vtype: 'daterange',   endDateField:'filtroFinal'}),
                    new X.field.Date ({fieldLabel:'Fecha Final',   id:'filtroFinal',   width:230, allowBlank: true, vtype: 'daterange', startDateField:'filtroInicial'}),
                    new X.field.Combo ({
                        id           : 'filtroDepartamento',
                        hiddenName   : 'codigoDepartamento',
                        fieldLabel   : 'Departamento',
                        valueField   : 'codigoDepartamento',
                        displayField : 'nombreDepartamento',
                        allowBlank   : true,
                        width        : 230,
                        store        : store_departamento
                    })
                ]},
                {layout:'form', x: 105, y: 110, items:[
                    new Ext.Button   ({text:'Buscar', width:230, handler:cargar_grilla})
                ]}
            ]}),
            new Ext.form.FieldSet({title:'Egresos de Caja Chica', x: 10, y: 220,items:
            [
                grid
            ]})
        ]
    });

    form.getForm().addListener('beforeaction', function(form, action){
        if (Ext.isEmpty(Ext.getCmp('fechaSolicitud').getValue())){
            X.msg.Failure('Complete el campo "Fecha"'); return false;
        }
        if (Ext.isEmpty(Ext.getCmp('chequeOrden').getValue())){
            X.msg.Failure('Complete el campo "Cheque Orden"'); return false;
        }
        if (store_editor.getCount() <= 0){
            X.msg.Failure('Agregue al menos un movimiento'); return false;
        }
        return true;
    });
    
    // ajax para cargar los datos filtrador
    
    function cargar_grilla(){
        if (Ext.getCmp('filtroDepartamento')){
            if (Ext.isEmpty(Ext.getCmp('filtroDepartamento').getValue())){
                X.msg.Failure('Seleccione un departamento'); return;
            }
            else{
                store_editor.setBaseParam('filtroDepartamento', Ext.getCmp('filtroDepartamento').getValue());
                store_editor.setBaseParam('filtroInicial',      Ext.getCmp('filtroInicial')     .getValue());
                store_editor.setBaseParam('filtroFinal',        Ext.getCmp('filtroFinal')       .getValue());
                store_editor.reload();
            }
        }
        else{
            store_editor.setBaseParam('filtroInicial',      Ext.getCmp('filtroInicial')     .getValue());
            store_editor.setBaseParam('filtroFinal',        Ext.getCmp('filtroFinal')       .getValue());
            store_editor.reload();
        }
    }
    
    Ext.get('fechaSolicitud').addListener('change',check_range_date);
    Ext.get('fechaSolicitud').addListener('blur',check_range_date);
    
    
    function check_range_date(){
    	var date=Ext.getCmp('fechaSolicitud').getValue();
    	var date_ini=Ext.getCmp('fechaSolicitud').getValue();
    	var date_fin=date.clone();
    	var filtro_ini=Ext.getCmp('filtroInicial').getValue();
    	var filtro_fin=Ext.getCmp('filtroFinal').getValue();
    	
    	if(filtro_ini!="" && (date.getFullYear()!=filtro_ini.getFullYear())){
    		Ext.getCmp('filtroInicial').setValue("");
    		Ext.getCmp('filtroFinal').setValue("");
    	}
    	
    	if(filtro_fin!="" && (date.getFullYear()!=filtro_fin.getFullYear())){
    		Ext.getCmp('filtroInicial').setValue("");
    		Ext.getCmp('filtroFinal').setValue("");
    	}
    	
    	date_ini.setMonth(0); date_ini.setDate(1); 
    	date_fin.setMonth(11); date_fin.setDate(31); 	
    	Ext.getCmp('filtroInicial').setMinValue(date_ini);	
    	Ext.getCmp('filtroInicial').setMaxValue(date_fin);		
    	Ext.getCmp('filtroFinal').setMinValue(date_ini);
    	Ext.getCmp('filtroFinal').setMaxValue(date_fin);
    	
    }
    
    // validacion de filtroInicial y filtroFinal
    
    Ext.apply(Ext.form.VTypes, {
        daterangeText : 'Formato incorrecto',
        daterange     : function(val, field) {
            var date = field.parseDate(val);

            if(!date){
                return false;
            }
            if (field.startDateField) {
                var start = Ext.getCmp(field.startDateField);
                if (!start.maxValue || (date.getTime() != start.maxValue.getTime())) {
                    start.setMaxValue(date);
                    start.validate();
                }
            }
            else if (field.endDateField) {
                var end = Ext.getCmp(field.endDateField);
                if (!end.minValue || (date.getTime() != end.minValue.getTime())) {
                    end.setMinValue(date);
                    end.validate();
                }
            }
            return true;
        },
        totalText : 'al menos un egreso',
        total     : function(val, field) {
            return store_editor.getCount() > 0;
        }
    });
    
    check_range_date();
});
